package com.qingcheng.service.goods;
import com.qingcheng.entity.PageResult;
import com.qingcheng.pojo.goods.Sku;
import com.qingcheng.pojo.order.OrderItem;

import java.util.*;

/**
 * sku业务逻辑层
 */
public interface SkuService {


    public List<Sku> findAll();


    public PageResult<Sku> findPage(int page, int size);


    public List<Sku> findList(Map<String,Object> searchMap);


    public PageResult<Sku> findPage(Map<String,Object> searchMap,int page, int size);


    public Sku findById(String id);

    public void add(Sku sku);


    public void update(Sku sku);


    public void delete(String id);

    ////////////////////////////////////////////

    /**
     * 保存所有价格到缓存中
     */
    public void saveAllPriceToRedis();

    /**
     * 根据skuId查询价格
     * @param id
     * @return
     */
    public Integer findPriceById(String id);

    /**
     * 根据skuId 保存价格到缓存
     * @param id
     * @param price
     */
    public void savePriceToRedisById(String id,Integer price);

    /**
     * 根据skuId 删除价格缓存
     * @param skuId
     */
    public void deletePriceFromRedisById(String skuId);


    /**
     * 上传sku到elasticsearch(全部上传，可以单独写到另外个项目中单独实行)
     */
    public void saveSkuToElasticsearch();

    /**
     * 根据商品的SpuId来上传sku到Elasticsearch 没有用到
     */
    public void saveSkuToElasticsearchBySpuId(String spuId);

    /**
     * 根据商品的SpuId来删除Elasticsearch中的sku 没有用到
     */
    public void deleteSkuToElasticsearchBySpuId(String spuId);

    /**
     * 根据购物车批量删除sku库存
     * @param orderItemList
     * @return
     */
    public boolean deductionStock(List<OrderItem> orderItemList);
}
